package com.cskaoyan.javase.io._2char._2conversion;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

/**
 * 字符输出流(做写的操作,表示将字符数据写到外存) 抽象父类是Writer
 * 具体的实现子类-OutputStreamWriter
 * 字符流的本质是字节+编码集
 * 所以OutputStreamWriter是将一个普通的字节输出流对象包装成字符输出流
 * 存在"字节输出流对象 --> 字符输出流"转换的过程
 * (重要)该类是字节输出流到字符输出流的桥梁,提供了一个转换的路径,所以这种流,称之为"转换流"
 *
 * 注意事项:
 *      1.字符输出流是带缓冲区的,虽然这个缓冲区的目的不是为了提高效率,而是为了编码的,但是同样是需要刷新的.刷新的方式有:
 *      a.flush
 *      b.close
 *      c.缓冲区满了(不能依赖于这种方式)
 *
 *      2.若想实现追加效果,则对应字节输出流的构造器append参数需要设置为true
 *
 *
 * @since 11:04
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) throws IOException {
        // OutputStreamWriter(OutputStream out)	创建使用默认字符编码UTF-8的 OutputStreamWriter。
        // 1.创建转换流字符输出流对象
        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("a.txt", true));
        // 2.write方法写数据
        // write(char[] cbuf)	写入字符数组。
        // write(char[] cbuf,  int off, int len)	写入字符数组的某一部分。
        // write(String str)	写入一个字符串。
        // write(String str,  int off, int len)	写入字符串的某
        out.write("今天晚上准备去吃KFC!");

        // write(int c)	写入单个字符。要写入的字符包含在给定整数值的 16 个低位中，16 高位被忽略。可以将这个方法当成直接传入char类型，写入一个char字符来使用。
        out.write('a');
        out.write('b');
        out.write('我');
        out.write("今天晚上准备去吃KFC!", 8, 3);
        out.flush();

        // 3.关闭流
        out.close();
    }
}
